package com.administrator.scoreManageSys.mapper.system;

import com.administrator.scoreManageSys.entity.system.Permission;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 权限菜单管理
 *
 * @author Administrator
 */
public interface PermissionsMenuMapper {

    /**
     * 获取菜单列表
     *
     * @return 菜单列表
     */
    List<Permission> menuList();

    /**
     * 添加菜单
     *
     * @param permission   权限关键字符串
     * @param menuName     菜单名称
     * @param route        路由地址
     * @param icon         图标
     * @param parent       父级 1级菜单父级为0
     * @param serialNumber 序号
     * @param grade        权限等级 1/2/3 一级/二级/三级 权限
     * @param menuOpend    是否开启菜单 1/0 开启/关闭
     */
    void menuAdd(@Param("permission") String permission, @Param("menuName") String menuName, @Param("route") String route, @Param("icon") String icon, @Param("parent") Long parent, @Param("serialNumber") Long serialNumber, @Param("grade") Long grade, @Param("menuOpend") Long menuOpend);

    /**
     * 修改菜单
     *
     * @param id           修改的菜单id
     * @param permission   权限关键字符串
     * @param menuName     菜单名称
     * @param route        路由地址
     * @param icon         图标
     * @param parent       父级 1级菜单父级为0
     * @param serialNumber 序号
     * @param grade        权限等级 1/2/3 一级/二级/三级 权限
     * @param menuOpend    是否开启菜单 1/0 开启/关闭
     */
    void menuUpdate(@Param("id") Long id, @Param("permission") String permission, @Param("menuName") String menuName, @Param("route") String route, @Param("icon") String icon, @Param("parent") Long parent, @Param("serialNumber") Long serialNumber, @Param("grade") Long grade, @Param("menuOpend") Long menuOpend);

    /**
     * 根据id删除菜单
     * @param id 删除菜单id
     */
    void menuDelete(@Param("ids") List<Integer> id);

    /**
     * 获取父级菜单列表
     * @return 菜单列表
     */
    JSONArray getParentList();

    /**
     * 删除关联菜单的角色数据
     * @param id 菜单id
     */
    void roleMenuDelete(@Param("id") Long id);

    /**
     * 获取菜单所有子菜单
     * @param id 菜单id
     * @return 子菜单列表
     */
    List<Permission> getMenuIds(@Param("id") Long id);
}
